// 2. 判断一个点是否在凸多边形内部。
// 算法步骤（射线法）：
// 1. 以点为端点向任意方向做射线。（平行于x轴方向）
// 2. 判断此射线与多边形的每一条边是否存在交点。 （先点的纵坐标（y）是否在边的纵坐标的范围(yrange)内，若在，再判断点的横坐标是否在边的左侧。同时满足，则存在交点）
// 3. 若交点的个数为奇数，则点在多边形内部；为偶数，则在多边形外部。

function pointInPolygon(point, polygon) {
    var x = point[0]
    var y = point[1]
    var result = false
    for(var i = 0, j = polygon.length - 1; i < polygon.length; j=i++){
        var xi = polygon[i][0]
        var yi = polygon[i][1]
        var xj = polygon[j][0]
        var yj = polygon[j][1]

        // var intersect = ((yi > y) != (yj > y)) && (x < (xj -xi) * (y - yi) / (yj - yi) + xi)
        yrange = (yi < yj )? [yi, yj] : [yj, yi]
        var intersect = (yrange[0] <= y && y <= yrange[1]) && (x < (xj -xi) * (y -yi) / (yj - yi) + xi)                
        if (intersect) {
            result = !result
        }
    }
    return result
}

